perm filename TODO.RLL[RLL,DBL] blob sn#644404 filedate 1981-12-03 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00017 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002		To do in Rationale
C00005 00003		To do for FIELDs
C00006 00004		Things yet to be done to RLL:
C00020 00005		Example of SPEC
C00022 00006		Possible Problems
C00023 00007		Quickies:
C00027 00008		Units to Rename/Add/Delete
C00028 00009		Fixes to UTIL, DAVE, RLL, AUX
C00029 00010		Fixes to CORLL
C00033 00011		Fixes to XUTIL(M)
C00034 00012		General LISP questions
C00037 00013		Fixes to Documents
C00038 00014		Possible incompatibilities of Rand-Ai / SCORE / ISIB versions
C00050 00015	Comments on Code
C00053 00016	[12 Oct]
C00060 00017		(Older changes done already - until 10 Sept 80)
C00085 ENDMK
C⊗;
	To do in Rationale
2) Class of people - subset of users?
3) Class of projects - each with affilited users ↑
4) New type - date; subtype of stringtype
5) Work on dialog with Entry.  Must do this with Keith

PutValue on Descriptions, or SYNTAX -- should CONS together the various things.

  (0) Fix ToEntry to insert the sender - Retrieval -- similarly FromEntry.
	[fix Record]
  (1) Add additional arg to WhenRetrievingG(P)
	- which is the testing predicate.
	eg EQ-PROP will pass EQUAL (EQ if (FSingleton (AtomType X));
	while MEMB-PROP will chose among MEMB, MEMBER and SUBSTRING (?).
	 - started this, but need to think more about this.
  (2) OrderTerms should simply determine which to do first, and extract that.
	This decision can be based on several things -- 
	eg use any Gen now present, else try to find some EQ-PROP whose
	prop is invertable.
  (3) Add on HowToPrint to each property.
  -- Read thru <CORE>LEGAL.VALUES to find new things to add in -- such
	as ARGUMENT, or new "slots" - from Bill's contribution.

	To do for FIELDs
1. DefaultCachField should PutValue, not UA-PUTPROP!
2. Type of inheritance should be ISubUnit, and parents the list
	(unit, slot).
3. 
	Things yet to be done to RLL:
updated [23 June 1981] [8 May 1980], [6 Apr 1980], started [8 Feb 1980]

1) Change DefaultAfterPutValue -- to consider recording changes to any of the
	nucleus units (those of RLL, SLOTS, ...) -- only if NOT caching value.
	[That external file can be used by other users to perform updates
	 to their copies of the RLL system.]

2) Get SPECS to work -- this should be like the UNITs package relation.
	Already in place: AnySpecializableSlot -- need "modes",
	and range-type specification which accepts both 5 and (*IntRange 3 7)
	for values (possibly only if "non-terminal")
  - must indicate individuals versus those "generic individuals" for simulation
	to be complete
		<<<### See Next Page ###>>>

3) MACROs still need to be implemented 
	[-- use DBL's code to understand those RESETVARS things..]

4) Figure out how to indicate some skeletal organization
	of some function, which can then get fleshed out by filling in those
	values (..outline..)  This was used, weakly, in EURISKO stuff.
   - Is this how to handle Templates? - perhaps as descriptors, ala SPILL agendae
	- so can determine new task by fleshing out such descriptor.
	only here will it call that function [in FindDefault] }
   - note one may want to override such specification, and 
	insist that such a specification be easy to perform.  (eg for an analogy)
   - examples:
Extended notion of Caching -- 
	[ie storing a value rather than recomputing it each time.]
	( Slots are but one example.)
  General spec for function:
	Look it up
	  If found: Return that value
	  If not found: Compute it
			Store it
			Return that value
  Examples: FunctionSpec
	(note it should be calculated by combining Defn, ... if ~∃ HighLevelDefn)
	    Slots for IExamples((AnyDog))
	    ? Descriptors?
Another instance:  Many tasks have
	Preliminary work -- eg type checking, authorization validation, ...
	Actual chore
	Post work -- eg ramifications

5) Fix slots of AllExamples[AnyFormat] do the right thing.
  a) [Here:	FnForDeleting, FnForSubstituting, FnForAdding, 
		FnForVerifyingAll, FnForKilling]
  - They are (I think) correct for FSet, FSingleton, FBag, FList
	and and other SlotFormats
	but not at all for those in AnyValueFormat.
	Also, many of these are inconsistent
  eg: FExecute - capable of using uUNIT and uSLOT, bound by FindDefault.
    	Will this get in trouble - ie with recursion?
	An answer: Use a new why, with (ValueFor unit slot)
 b) What goes in FormatCharacter?
	Should these be the names of units?  how should they be used, for
	things like format coersion -- and by whom (themselves?)
 c) Just what are FOneOf and FExecute?  What do they do?
	What should they do?
 d) Note Every orderedset is a set,  every set is a bag, every bag is a list.
	Furthermore, ∃ easy conversion from singleton to orderedset.
	Can this ordering be used to advantage?
	How does FListN fit into this?
	<<Needed for FormatCoercion to work correctly.>>

6) More generally -- need to figure out what sort of stuff to store in the
	various Characterization slots (eg FunctionCharacter as well)

7) What does go on the 4th element of FunctionSpec? 
	Some collection of characterization units? (see above)
	Predicate calculus specification?  
	The "semantics" (pragmatics) of this unit?

8) Many processes are now just lisp functions.  Unit-ize them.
  EG: Unit creation is a  unit list process - make it so. Give it a defn, whose
	rangetype is WhoCares!
		Using ApplyToEach ?
  - Should include: DomainType & RangeType specifications, at the very least.
	This will help in the development of various things, like
	- OptimizeCode
	   Letting each function have a slot which indicates
		how to improve it -- eg each of PROG1, PROGN, AND, OR should
		all just return their respective arg, if there is only 1.
	   Similarly LENGTH could suggest looking for embedded APPENDs, etc.
   - Macros - where each function could house who uses it.

9) Ah yes, Macros:
   Spse the function FOO calls (GetValue fred 'Slot7).
	As the GetValue macro is expanded, the value
	(Slot7 FOO) is added onto the value of ToGetValue:ValueUsedInMacro.
	Now information of ToGetValue:ToPutValue will check each time
	a unit, X, gets a new ToGetValue -- if X appears on TGV:VUIM
	(ie an ASSOC is performed), every value there is "Invalidate"d
	for ValueUsedInMacro reasons -- ie the interpretered form is read in.
	What more need I say?
	(actually that (Slot7 FOO FIE ...) be an entry on TGV:VUIM)

10) Production Rules - their formalism, and the like, needs to be resolved.
	Figure out more stuff for rules - eg store # of times tried, and success.
	More heuristics... (eg  AnyUnitCreationRule)

11) More work with HighLevelDefn 
  - so if F ≡ (SC f1 f2), then we can determine the HighLevelDefn of f1, if necessary
  - write CommonHLDefn -- HighLevelDefn should be sufficient to define a slot!
  - slot Combiners take 4-arguments  [check these 10/ix/81]
	First is list of slots,
	Second is specifications -- eg TransitiveClosureCircular, Ordered, ...
	Third is list of argnames 
	Fourth is Code? - this can be purged -- merged in with argnames..
  - FnForUpdating is now defined from the HighLevelDefn.
	Make FnForInverting and FnForCaching be as well.
	[Remember to also check general Functionals]

11.5) Types of TransitiveSCFormer:
	+-IncludeSelf, +-WellFounded, +-StrictHierarchy, +-PreserveOrder

12) Consider other ways to store values:
  a) ToCache of AllTypicalExamples  - (*Do* SeeU&S +++ AllExamples)
	on all units y s.t. y.Isa = (AnyX) [note must be a singleton.]
  b) Caching - by storing AllIsas on AnyX, and putting (FSeeU&S AnyX SuperClass*),

13) Units for special values - such as NoEntries, or RecomputeMe?
	Maybe for all global variables? (these (↑) are just "constants")

14) More general I/O-Type, which subsumes DomainType and RangeType.
	Need way to bind something in DomainType and use that value in
	RangeType.
    Specify a function's range in terms of its inputs - see ala
	system used in ApplyToEach!  It seems to work 
	Use this hack in ComposingSCFormer (for [Ordered]Composition) and 
	ApplyingSCFormer (for Apply[*]ingFn).  Also to IsOk, IDENTITY, and who knows
	what other LISPfns.
    Note that ApplyToEach is just like Apply*ingFn - only it takes a few more args 
	-- and the first arg is now a mapping fn (perhaps this should be included
	in DomainType of ApplyToEach?)  Another difference: only the 2nd arg is
	applied to the unit -- not all of them, as with Apply*ingFn.
   Related: need GrammarType (or FGrammar?) - which takes set of production
	rules, whose "terminals" are "simple" specifications...

15) [HARD] General constraint mechanism -- to state what types of things are
	needed for RLL to work (Garden of Eden),
	to use to reason about redundant values, ...
  Another example:  If R and S are inverses, then S:DomainType should help
	determine R:RangeType, and vice versa.

16) Use of general (quantifier) variables, to handle various complex relations.

17) Have better description of parameters now on <user>:When___ingNetwork --
	perhaps have canned values, which are mapped along; and which are
	used during queries...

18) Slots whose values are computed for SideEffect only -- eg so the inverse
	pointer is created.  - note FunctionSpec is one of these; making
	it unnecessary to do those obnoxious CacheValues, maybe.
  Consider using something like PseudoInverse here -- note this is a subcase
	of more general "push when filled" algorithm.
	Note that a side effect of storing (U S) on SofU:LivesInLocation
	means (PointAt SofU) should be the value of U:S.
	    <<Side note: (i) Should be MyLivesInLocation, ...
		(ii) Current single-value/list-of-values is NOT sufficient:
			at least when FListN used! -- many changes to
			UpdateInverses and friend should be made.

19) Consider MyDefinitionalSlots -- what things are necessary to define this
	unit as whatever-it-is.  This includes Isa, but probably not MyIsa...
	or does it?  Now ask what should happen if one of these slots is deleted:
	does this unit deserve to remain?

20) The various Formats and Datatypes should be further blurred together --
	all are functions which take some arguments, and return a function
	-- ie each is a functional! or at least a CodeAl. Think about this a bit.

21) Some considerations should be made for the current mode -- ie whether 
	the user is present or not.  In this case, the system
	might decide to go ahead and guess, rather than ask the user a
	question when in doubt.  Note this should ALWAYS be recorded,
	on list of possible problems...
	Example of SPEC
   need Specs, Instanes, Genls, InstanceOf (← used to create new objects)
	maybe Specs*, Genls*, ...  AllSpecs? AllGenls?

Ship
  Cost: (*IRange 13 20)
  Specs: (BigShip Tanker)

Cost
  Isa: (AnySpecializableSlot)
  Role: - one of R(estricted), O(ptional), C(opy), U(nique)
		- note Unique NOT needed, as these just other slots!! -
  RangeType: (FSingleton IntegerType)
		- note this means something different here, depending on role!!
		- now can include dataranges, as well!

*IRange
  SubRange: (λ (r1 r2)  true if r1 is a subrange of r2)
  ?Verify?: (λ (...) returns function which ...)
  RangeType: (FListN IntegerType IntegerType)


BigShip
  Genls: (Ship)
  Cost: (*IRange 15 20)
  Instance: (Tanker#37 ...)

Tanker
  Genls: (Ship)
  Cost: (*IRange 14 17)
  Instance: (Tanker#37 ...)

Tanker#37
  InstanceOf: (Tanker BigShip)
  Cost:		15

	Possible Problems

QUOTE? are still in HEURS
BACKQUOTEFN still in EURISKO
AnyCT&U in GENLINFO

AddOnCharacter - now takes another argument [NIL if single element, T if list]
McDo is still around - this may cause trouble!

MyCreatedAs still has (VirtualSlot) and (PrimSlot) - these should be updated!
	(you thought history was static!)
	Quickies:

ComposeInOrderAux, and friend - should twiddle the specvar, isList, to
be the current RangeType - by using ApplyRange, based on MapUnion or MapInsert,
each new composition.  This will require a bunch of twiddling...

<<Note this means MapUnion/MapInsert must be unitted>>

-  RLL-WRITE should be further modified - so the value of the WhenWritingNetwork
function is used:  maybe XWRITE, or COMPACT, or ... depending on its
returned value.  [Note this means StandardStartUp should take a few
different parameters: C? for Compact if necesary, X? for XWRITE if necessary,
... where necessity is determined (for now) by the CompressMe? function 
- [this should be in PROP, on DAVECOMS {<- should be renamed to ?COMS}]
Furthermore, things like RemoveVirtualSlots should only be done then,
perhaps.  Indeed, many of the parameters should be Y/N/C?/X? - to indicate
whether it should be done automatically or not, or only when ...]

New inheritance: ISubUnit - takes a unit and slot, and makes a new unit...
	Q: Can I twiddle NU and FNewFieldUnit to use these inheritances
	as IExamples, ISubClass and ITypEx did?

Some LISP functions, when typed at top level, actually
call a different function -- like PUTD is executed as \PUTD, and SETQ as SAVESETQ.
LISPX\ does this.  Make PutValue, and friends, use this to be undoable.
(see 22.3?)

Fix RLL-WRITE to permit the file to be copied, rather than renamed.
	This should depend on result of the WritingNetwork function --
	returning Compact if the function is to be copied, and nonNIL
	if acceptable - NIL may be error.

FirstOf -- new type of slot combiner - like McCarthy OR - when subslots
    	are disjoint.

	Extra undeclared variables
Get list of unDescr-ed units (from Steve, etc), which I'll describe

[3-May-81]

[Test out FnForUpdating of Composition and Starring - esp the P case.]

Change from Record{Put/Get} to JJF's package

Finish fixing up Slot Combiner's FnForUpdating s
	(now on P part of Composition)

[5-Feb]
1] Fix TypicalCodeGenFunction(?) 
- give it appropriate GetFNSUsed & GetCVsUsed values.

1) Finish IsParse? - used with GrammarType.

2) KRL like parser - for "a Moose with Antler = big, ..." (should be easy, using
just FNewUnit.)

	Units to Rename/Add/Delete

Rather than WHY value: +ALWAYS-UPDATE,  make it -USE-OLD-VALUE.

--Rename

TypicalDataType	 →	TypicalDatatype
Exs		 →	Examples
HowToProcess	 →	LispFn
	fix Process [Args to Process -dependent on ?]

--Delete
HighLevelToCompute (subsumed by HighLevelDefn)

--Add
AnyIsa, ExistIsa, VariesWith, ...
	Fixes to UTIL, DAVE, RLL, AUX

Default for BACKUPDIR should be "", not NIL!  ← or is this DAVE?
	Fixes to CORLL

1) ADVISE the function which does PAGE assignment -- as UP-BUMP is now only
called when the number of free cells crosses some threshold -- and currently
it is possible for page after page to be gobbled up, without triggering
this interrupt.
[Perhaps advise should be on Garbage Collector, in general?]
	↑ Steve K's looking into this.

2) Some units on UP.INCORELIST should not be -- their value cell
(returned by GETTOPVAL) is of the form
((<kbname> . <unitname>)), and not
((<kbname> . <unitname>) <sexp> . <changeflg>) -- ie it already had
been swapped out!

3) UF-SUMMARY is broken - its assumptions about names is erroneous --
this is apparent when NIL filename is passed.

4) UF-XOPEN automatically read-writes the new KB.  It should be able to
open it "virtually" -- ie nothing would be preserved externally, only
in the LISP image.  Also, it should allow NIL to be used for the KB name --
enforcing the "locality" of these units.
[see below]

∂ 1 Aug 1981 2207-PDT	GREINER		The NIL kb
To: csd.smith at SU-SCORE
cc: greiNER

Dave -
	How well integrated is the NIL kb?  There are times I want to
just dump into core the various units found on some Xfile; and do NOT 
want to go thru the space expenditure of create a regular hash file 
for this stuff.
I'd like to do a (UF-XOPEN NIL 'Fred.XKB) -- but CORLL would
squack at that.  The other possibility seems an awkward
	(UP-NOBUMP (temp)
		   (SETQ temp (UF-XOPEN 'JUNK 'Fred.XKB))
		   (CLOSEF temp)
		   (DREMOVE temp UF.NETWORKS)
		   (UF-OPEN temp 'INPUT))
which I'd really rather not do...
Comments?
	Russ
-------
∂ 5 Aug 1981 1032-PDT	<CSD.SMITH at SU-SCORE>		Re: The NIL kb
To: GREINER at RAND-AI
In-Reply-To: Your message of 1-Aug-81 2207-PDT

You'd have to modify UF-XOPEN to do the special case checking to make this work.
I suggest a corresponding change to UF-XWRITE if you so desire.  The more 
elegant way to do things is to perform the separation between file names and
in-core knowledge base names, thus allowing an arbitrary number of scratch
knowledge bases of arbitrary names.  If a KB doesn't have a read/write file
connected to it then it wouldn't be pageable.  You're welcome to make these
changes.  I'll provide a bit of guidance where necessary if you want to 
sacrifice a couple of days.
-------
                ---------------
-------

	Fixes to XUTIL(M)

--- To XUTIL(M) ---
	Fix !EDIT so it asks if the function should be Unbroken while you probe
about it. -- maybe this should be a fix to EDITF?  - tried but had trouble...
	New FILEPKGTYPE: LOAD-FILE -- which means load in this file, if not
already present.  Remember to fix up KBsFNS, KBsVARS correspondingly.
	BTFN (and especially REEVAL) get into real trouble when the function
is mispelled -- figure out about generators and fix this!
---------

MakeFile1 needs better advice
	General LISP questions

Why isn't CONN in LISPXMACROS on Rand-Ai's Lisp?  ask DEA

Larry -
	I've a few questions, related to InterLisp, as you might have guessed.
First: I noted that neither PUTD nor /PUTD (nor MOVD, /MOVD) call
MARKASCHANGED.  Is this a feature, or a bug?  You may remember I went
through the hassle of advising these functions, to help with my bookkeepping;
until you told me the FILEPKGTYPE(FNS WHENCHANGED (...)) hack would solve
these problems.

Next: Is there any way I can enter LISP which does NOT read (and execute)
the INIT.LISP file on my login directory?  (Short of first renaming that file?)
I know I can then UNDO that GREET command, but I feel guilty making
LISP do all that work for nought.
[The problem which motivated this question are files which are LOADed
during this start-up.  As you know, the FILE package never finds out
about these files, which makes them next to impossible to alter.
By the way, simply tacking the names of these files onto FILELST
makes the functions on these files "readonly" -- EDITF will now read
in these files, but a subsequent MAKFILE begins by (re)reading in the
file, wiping out the changes.
Indeed, the only way I know of altering these files is to first
LOAD them by hand.]

My final question is about Rand-Ai's <LISP>LISP.EXE.133 in particular.
There are a lot of bells and whistles present in SCORE's version which are
not included there -- such as the LISPXMACROS
EV, EP, EF, and CONN.  Will subsequent releases of Lisp include these
niceties; or will these only be customizations?

Thanks,
Russ

Ask how to advise EDITF to ubreak the function - regualr advise doesn't work,
as I just get the message that it's being edited...
-------

	Fixes to Documents

Add to DEMO:
	How to start up to on a new system
	Possible incompatibilities of Rand-Ai / SCORE / ISIB versions

Comments on Code
Why some infinite loops are harmless:   
[13-Sep-81  1626]

Well - GetValue might have the same arguments twice, and this does NOT
lead to an infinite loop BECAUSE: that 2nd time thru might have been for 
some KB update - which is "Acted on" only if the value has been changed.
Now the first time thru the value was already stored; so this second time
it's easy to retrieve the value.  As the slot's ToCompute was not used, and
no new value was stored, there is no need to do any updates -- and hence
we will not need to request this u:s again (as it was only needed for
KB update purposes in the first place.)

Hence seeing two identical calls to GetValue on the stack is NOT intrinsically
bad, IF THAT CALL IS RELATED TO KB UPDATES.  (Otherwise we is in truoble...)
Three identical calls is always trouble.

---
Things to do:
Put an ERRORSET within INTTY, around that TAILP function.  Recall that that
function screws around with terminal I/O stuff, and so causes trouble
if ↑H-ed.

Consider making the GetValueSTK type of variables GLOBALVARS which are RESET
within each break.  Hence the stack would only reflect current calls, as
desired.  Also would be reset each ↑D, or each ↑ itself.

While fixing TRACER and FIND-INFINITE, use Warning equivalent rather than
ERROR - give the user a chance to say NO.

If XUTIL needs fixing anyway, change Dave's erroneous comment re: DRIBBLE.

[12 Oct]

MySensibleSlots - different for different units -- 
for subunits, use:
	(Unioning <MSS:HLDefn> (Composition <MSS:HLDefn> MyLivesInSlot)),
where MSS:HLDefn is current HLDefn of MySensibleSlots.
[or (Composition <MSS:HLDefn> (Unioning LivesInSlot IDENTITY)) ].
Note the proper way of doing this is to have a subunit for 
TypicalX:MySensibleSlot - which has a HighLevelDefn and other misc.

Let each unit decide on it appropriate slots - using U:MySlotsPred
(a function taking (U S why)).  Then store ? on TypicalThing:MySlotsPred,
and something else on TypicalSubUnit.

LivesInLocation	 →	MyLivesInLocation
LivesInSlot	 →	MyLivesInSlot
LivesInUnit	 →	MyLivesInUnit

The function Invalidate should really be InvalidateValue (as opposed to
field).

Got rid of Subsetting & CommonXProd -- before KillUnit-ing it, made sure its
FnForUpdating has been transfered to ApplyToEach. Check it out with
GenlsModels and MyNewPossibleSlots.  
	[Eventually find a better name for ApplyToEach - like MapTogether...]

The various Domain and Range type specifications should correspond to the
lisp function in that same tuple - obviously!  But it doesn't!! The 
DomainType specification is for the LispFn, NOT the definition, currently.
FIX IT! Have the ToCompute take just 2 arguments. (You dummy!)
	<<< Working on this [4-Oct] - there is currently a check in GetValue
	which examines each function, for number of args.  Will leave
	that in a while... >>>

FOptional now exists, and may even work.
The same for the rangespec - *DomainFn.

Be cleverer wrt removing virtual links:  Perhaps only do this when you've
decided to compress a KB anyway.  Note this will be a hassle when you've
that foursome of core KBs around -- first remove virtual links ON ALL, and
then compress just those which have to be compressed... (Do this ONLY IF
AT LEAST ONE has to be compressed.)
	- Started this (28/Sep/81) -- but used REHASHFILE - which does NOT
	- shrink the file...

DCL (and DCL?) should be able to overwrite existing declarations --
after asking the user...  These guys also sometimes point to the wrong place,
when they (resp) find that someone got there first...

Changes KBUpdates -- so UpdateInverses takes a list of tuples; and so does
the overhead only once.

Note AnyClassOfObject:Isa = (AnyClassOfObjects) -- make it so!
[Currently points to Anything.]

Hmmm - note PsuedoInverses are NOT handled correctly in general:
When V is added to U:Networks, (DESTATUS U) does indeed get deposited on 
(ENSTATUS V); but the other changes are NOT made.  Why?
	-now they are-

In calls to GetValue, changed from 
  SOFT => -COMPUTE
  NO-CACHE => -CACHE
  VERYSAFE$ => SAFE$
  SAFE => ""
  CONSTANTSLOT => ""
[ Left FAST-GET - this may be used eventually]

Changed values of MyCreator from
  "LENAT", "CSD.LENAT" => DougLenat
  "GREINER", "CSD.GREINER" => RussGreiner

Have the value of FLAGS given to BAKTRACE in BTFN at least 7.
Better, use the writing function I already wrote, which gives the actual
	arg names, and in which I can set the PRINTLEVEL...
Make all KBs not currently in use a XKB file -- so I can make other
changes to these as need arises.

(Basically for the sake of *P) AllIsas should include TypicalExampleOf 
	and have *P key off that. (Later there'll be a *P', which does
	what *P does now...)
  -- Done - sort of.  Now there is that MyIsa, which does the right
	thing for typical examples.  And AllIsas has the def'n 
	(Composition SuperClass* (Unioning Isa MyIsa))

2) Fix up each TypicalExample:
	The Isa should point to what its a TypicalExampleOf,
	and the MyIsa should refer to AnyTypicalExample (possibly with the
	self awareness.)
1) Go thru all units, adding only a SelfAwareness...

Fix up RLL-OPEN to check dates, and open the XKB file if it is more current.
	(Older changes done already - until 10 Sept 80)
[10 Sep]

Change adviCe to adviSe, for EDITF
	(If a function is broken, rebreak it after you finish editing it!)
	-- no - just stored the actual (ADVISE 'EDITF ...) to avoid hassles.
Have AP take 2 args: the second for positioning -- just hand this 
	to the (## ...) call

Add FindInfinite to XUTIL -- to find when a function calls itself with the
	same args.

Fix SETSYNTAX stuff - make it still do the work, only ask in case not a known
	host.


Fix RLL-FAULTEVAL (RLL-FAULTAPPLY) to check Unitp first - avoiding the call
to Processp in those cases.  Also, in case of a single argument (eg OPK <cr>)

NewPossibleSlots →	MyNewPossibleSlots

Add on an additional field to PseudoInverses - which indicates whether we
	have a single value, or a set of them.

0) Figure what the 3rd argument to GetValue really mean!  Esp IGNORE-VALUE,
	From, Calculating, ...  (maybe some of these should hold the value,
	to make the computation faster for ComputeWhenFilled)
	Fixes done!
[5 Aug]

Add a new PROP-PRINT - to use as extra arg to UF-SUMMARY, which prints
	out units in nice plist format.
	Should be like UA-PRINT.  Figure out how to twiddle SHOWPRINT.
   - Use the function PRINDEF - which allows me to give the left margin.

[2 Aug]
Fix up RLL-OPEN to check dates, and open the XKB file if it is more current.
Have the value of FLAGS given to BAKTRACE in BTFN at least 7.
Better, use the writing function I already wrote, which gives the actual
	arg names, and in which I can set the PRINTLEVEL...
Make all KBs not currently in use a XKB file -- so I can make other
changes to these as need arises.

  <<<SCORE is now fixed up as well!!!>>>
I put on a MyIsa on all Rand-Ai units - pointing to (AnySelfAwareUnit).
	[Note TypicalSelfAwareUnit:NewPossibleSlots includes those syntactic slots.]
  This was NOT done for the SCORE KBs.
Note that henceforth TypicalMumble:Isa include (AnyMumber); it is
	TypicalMumber:MyIsa which refers to AnyTypicalExample.
  Again, this fix made at Rand-Ai, BUT NOT AT SCORE.

[1 Aug]
(Basically for the sake of *P) AllIsas should include TypicalExampleOf 
	and have *P key off that. (Later there'll be a *P', which does
	what *P does now...)
  -- Done - sort of.  Now there is that MyIsa, which does the right
	thing for typical examples.  And AllIsas has the def'n 
	(Composition SuperClass* (Unioning Isa MyIsa))

2) Fix up each TypicalExample:
	The Isa should point to what its a TypicalExampleOf,
	and the MyIsa should refer to AnyTypicalExample (possibly with the
	self awareness.)

1) Go thru all units, adding only a SelfAwareness...

Fix CORLL - UF-CANCEL needs a CONCAT
Add on AnyItem - where AnyRationale had been

Fix DCL macro - in case there are no args, to just put (DECLARE)
Add on features to BTFN:
	(from <FN-NAME>), (to <FN-NAME>), (between <FN1> <FN2>)...
Let REEVAL macro do some error-correcting (ie if NOT a function, or not
	on stack, then walk thru stack, trying for a match... stopping
	at first one user OKs.  Note can put "$"s and friends here as well...)

IUseToComputeOf	 →	IUseDefnOf
ToComputeUsedBy	 →	DefnUsedBy
SameHLToCompute	 →	SameHLDefn
AnyArchetype	 →	AnyTypicalExample
Create a new APV for Format, which checks to see if the value is changed,
	on a cached function.  If so, consider waddling about the KBs,
	fixing formats.

[23 Jun 81]

Figure a good ratio for file size to #units - and squish to file if this
is exceeded.

6) Change function in TypicalInheritableSlot:AfterPutValue -
If the unit, U, is a typical one, then do the necessary work to find each 
yεU:TypicalExamplesOf such that y:S is now different.
Then go thru and invalidate each of these.
(Maybe first see if the invalidation is trivial,
and only do this work if necessary.)

This will be particularly necessary to ToXValue, for the macro task.

1) Fix the advice to various functions, to be something like
	ADVISE foo 'AROUND '(RESETVARS ((IgnoreFnInPUTD (CONS x IgnoreFnInPUTD))) *]

2) Make UpdateInverse just a special case of general KB updates --
	and expand that operation -- eg to go from <kb> to <kb>.STATUS,
	or ...

KBupdates is also a UnitProcess -- make it so! 
For EuriskoProcesses, DomainType can be deduced from WhatToProcess.

[5 Apr 81]
0] UpdateInverse doesn't seem to be working - at least when new units are added.

4) Change from OneOf to putting (*Do* FExectute (λ ...)) on the typical examples -
	do it for LispFn.
	Question: Can I eliminate other definitions as well, using such tricks.
Fixed

[1 Apr]
<Dave: could we have several logically distinct KBs on one file?
< ans: no, but can be simulated...
10) The way of handling functions [Processes] is NOT totally consistent. 
   Should have arglists,... Also some notion of how to check for what.
	New apply - should be: if ∃ n args, if n=1, then slot, n=2 => field,
		else just apply defn of first arg...
   Change from HowToProcess to LispFn
   Fix Processes, so its args can vary
	ie, use DomainType for each, with RangeType = "WhoCares"

 Description of KBs, at top level [logically distinct]
RLL - only the list of "stops", with essential ones extended.
USERS - list of users, and of classes of users - this KB always loaded in as well.
SLOTS - holds all the slots
LISPFNS - holds the various LISP functions used; needed to reason about ...

Not included, at least not yet:
GENLINFO - misc very high level things, which point to most of rest (basically this
	is set of units for classes.)

3) New functions, which use FocusStatus:
	DeactivateTask	[Inactive]
	SuspendTask	[Suspended]
	ActivateTask	[Queued]
	ProcessTask	[Running]  {formally ProcessTaskInstance}

[13 Mar]
5)
a] Give each KB a SubKBs slot, which holds the names of logically seperate
but essential KBs. 
b] Twiddling the StandardXUp (XεStart, Finish) functions -- in particular,
change the order of args for them, to do RECOMPILing FIRST! (while units around.)
	Fix up WhenXingOptions on TypicalUser (and all examples.)
c] Store stuff in SLOTS and USERS. (once they are subKBs.)
[12 Mar]
Also figure how to use values.   [Eg does L-AND work here, or not? - Yes]
Get rid of Agenda, fix Spill,
4) Revert back from AnyRuleSpecFn to slot. Change Conjoining to ListOfParts
(that is, executable parts).  Fix IfParts, ThenParts to use this, NOT MySlots.

Units for Known, Unknown, LeaveForLater (in HEURS) - these used in Rules
	{Winding thru Spill Rules (R-Backtrack)}

9. Make sure each slot has a MakesSenseFor 
	- and improve final function to	confirm that for each...

13. Class of temporary units - eg instances of AnyFocusInstance - to be deleted
	(along with virtual slots) when KB is closed.
---------
[5 Feb]

?????
0. BIG CHANGE: The UNIT should know about the accessing, not the slot! Hence,
	associate with each KB (or unit?) the name of the accessing types -
	so change GetValue to RLLGetValue, and stick (Get . RLLGetValue) on each
	of current KBs (similiarly with Put, Add, ...)
	Note: to emulate Units, just put UA-GETVALUE there...

    In this way, we can solve Genesereth's & R H-R's complaints, ...
	and allow various schemes
	for indexing.
?????
	- Status: This sorta goes away... -

TypicalVirtualSlot → TypicalComputableSlot
TypicalPrimSlot	 →	TypicalPrimitiveSlot
ToInitialize	 →	ToInitializeValue ← InitializeSlot
ToCache		 →	ToCacheValue	← CacheValue

Delete AnyCT&U, AnyAT&U, TypicalCT&U, TypicalAT&U - they are unnecessary!
(as really just dealing with composition).

2) Finish up various facts about SlotCombiners.
Esp. FnFor?ing, which replaces UsingSlotCombiners, ...
	- Status: this should be done now ... still unchecked -

3) New KB - LISPFN - this will house my description of various things which are
now lisp functions, especially
GetValue, ...
MapUnit, ...  [note this MAY require fixing I/OTypes - as union of ...]
DefaultGetValue, ...
	- Status: Still may need I/OTypes, but pushed this. -

6) Fix up OrderedPrototypes to be more efficient - so renames slot from Prototypes
to OrderedPrototpes, and note that defn of Prototypes can use that: in its defn.
Or just make Prototypes never-cached! (as OrderedPrototypes had been.)
	- Status: Done as described -

7) Figure out what to pass along to DefaultAfterPutValue - perhaps it should
be a history list, or the form ( ... (Slot1 Unit1 Add) (Slot0 Unit0 NewVal) ... ).
Maybe not.   Newer things toward the front.  This should subsume the hassle
now done for FunctionSpec.

Should this only be done for circular things? That is, cases like RangeType?
(so flag, associated with each slot, set to do these things.)
	- Status: Ad hoc things passed (and checked for), as necessary -

[17 Dec]
 add on RangeInterpreter for UnrestrictedType
10) Find why specifying RangeType (when Format was NIL) erased both.
Some loop there.

11) Make AnyDatatype ⊂ AnyUnaryPredicate, and change slot names appropriately
Is Format ⊂ AnyCodeAl? No - but it is similar....

12) Use LASTPOS for REEVAL's starting position, rather than NIL.

13) Make sure each format's FnForXXXing returns its last argument (which is
now the modif) if successful. Hence forth that will be used!
(When verified that this works, change each DefaultXXXValue function, removing
the check.

14) Decide if ADDTOVAR works, or if this gets stuck on MARKEDASCHANGED...

15) On BQ* macro, fix so only (PROG ((g0012 (CAR sss)) ...) (RETURN (...)), rather
than use those SETQs

10. Use result of DefaultBeforePutValue - and make sure the verifiers return
    	such [this is modify...]
	Things done

16. Need a WhenFilled (Defn like IfNeeded) 
	[perhaps a ComputeWhenFilled, listing slots to be fixed up]
- this pushes some values along
	when a new value has been enterred...
	[This can do (1) recomputing Essential slots, and (2) determining value
	of slot X when slot Y has been changed.]
  Use this to rid self of FunctionSpec monstronsity, by always pushing values into
	slots, in all three cases. [Use CacheValue for one not explicitly requested,
	with why value explaining this.]
  Another solution: 
	FunctionSpec, when called, automatically caches Defn, DomainType and
	RangeType. So these slots don't both caching -- ie ∃ new slot,
	ToCacheValueFromElsewhere, which FunctionSpec calls.
	Note  Defn:ToCacheValue is AlreadyCached (which ≡ NoOp)
     (Should the slot-combiner know about this? How? 
	? (DoAlready (ApplyingFn CAR HighLevelDefn)) ?

[29 Nov]
Each of these - *P, OneOfThese, Predicate, ... should be units.
3) Use BACKQUOTE to advantage, to make more readible code

Rename from HLDefnParser to HLDefnExpander (and for Type)
	- fix FunctionSpec & VerifyArgs/VerifyValue
Defn of FunctionSpec - GetAccessFn => GetValue for last chance
	(worry of infinite loops...)

[21 Nov]
 Fast flag to UU-DIAGNOSE
 QUOTE?# => QUOTE? => BACKQUOTE
 UF-CANCELNETWORK takes a list
 UF-OPENNETWORHεf UF-CLOSENETWORK  -- 2nd arg is fn to be executed
	[NIL defaults to earlier; T does nothing]
	-- 3rd arg : T means ReadOnly
   -- rewrite own UP-OPENNETWORK -

Twiddle AFTERSYSOUTFORMS, BEFORESYSOUTFORMS

Finally thought of them:
	Arg to pass to OverallStartUp, and WhenClosing - so not just name,
	put 2nd value, which that function can use.
	(This ?th argument to UF-OPENNETWORK/UF-WRITENETWORK)

[14 Sept]
1b) RELATED: ToInvalidate - associated with each slot, indicated what to do
	when this value is no longer relevant.

14. IgnoreCached - if given to GetValue, does not do UA-GETVALUE, just uses Defn
	to recompute it. Note: old value should be passed to CacheValue - this
	had always been NIL before.

[9 Sept 1980]

PrimSlot	 →	AnyPrimSlot	← RemoveVirtualSlots
VirtualSlot	 →	AnyComputableSlot  ← RemoveVirtualSlots
$SELF$Slot	 →	Any$SELF$Slot
Examples	 →	UnitExamples

13. Make unit initialization faster 
	- cache slots, ... on inheritance.

0) Now (4 July) doing:
	AnyUser - see #5

0.5) ReadOnly Mode -- set UP.BUMP? to NIL 
	LOGOUT's advise - to see if any put units since last SYSOUT, or
	OpenNetwork (if UF.NETWORKS non-NIL)
  [When logging out, ask user -- even if ReadOnly...?]
 Store who has used this core image.

2) UnionDT, and IntersectDT - need to deal with cases when types are
	different (eg FunctionType & SlotType [transform SlotType into
	(FunctionType (?DomainType? UnitType...))

5) AnyUser, in RLL. - here we store which KBs this user will want. In START,
	single question: "Your usual?". If Y, these loaded in.
	Else gets list, with questions. (May decide these are to be his default, or
	not.) Also, his "profile" indicates answers to the questions.
	Store with each KB whether or not it was Disconnected (and from whom.)
	If not, why even ask to reconnect?
  When he creates a new KB, this added to his list.

[4 July 1980]
ActionPartOfRule →	AnyActionPartOfRule
IfPartOfRule	 →	AnyIfPartOfRule
ThenPartOfRule	 →	AnyThenPartOfRule

1. Fix EDITU so second arg given to PutValue -- so may verify or not...

2. (QUOTE?# '(LAMBDA (*1) (PROG ?1 *2))
	    '((G0035)) 
	    '((unit slot) 
		((* this list is bound to *2) (UA-MAPSLOTS unit 'WRITELNTTY))))
  returns
   (LAMBDA (unit slot) 
	(PROG (G0035) 
	      (* this list is bound to *2)
	      (UA-MAPSLOTS unit 'WRITELNTTY)))
	That is, QUOTE?1 takes three arguments:
	#1: a list, in which substitutions will be made,
	#2: a list, whose i-th element is the value for ?i [here ?1 is (G0035)]
	#3: a list, whose i-th element is the value for *i [here *1 is (unit slot)]

[8 May 1980]
1. Ramifications of Altering a slot's value -- eg
	(i) IF x.S* is changed, THEN ∀ y ε x.(S-1)*, y.S* is invalid
	    [IF S = T ∪ V, & something is added to x.T
		THEN x.S should have that value aded as well - if format is ...]
	(ii) IF OrderedX is built from X by some ordering - ie is redundant-but
		ordered of X - then when U.X is modified by Adding, or Renaming,
		X should be removed from U.SlotsNowOrdered.

5. DomainType, RangeType
	ValuesInvalidated - defined from HighLevel, as should Format, Datatypes

    1) Make sure VerifyAll is doing the correct thing. Also pass unit and slot name
    	to it. (Fix it up for rest of ValueFormats.)
    	Delete now worthless FnForVerifyingAll and -- List.
*   2) MyKB is AnyUnitFunction - make it so.
    5) Args to HLDefnParser should be (name (RangeType) ...) 
    	(note: delete HLVerify - now RangeType.)
    Define DomainTpe, RangeType
    	[Note: need only FnForAdding - 1, List, 1st - come from why part.

 Units renamed.
FnForRenaming1	 →	FnForSubstituting1
ToRenameValue	 →	ToSubstValue	← ↓
[DefaultRenameValue → DefaultSubstValue - this a function]
SubSetDT	 →	SubDT
SuperSetDT	 →	SuperDT
SlotsNowOrdered	 →	MySlotsNowOrdered
EssentialVirtualSlots	 →	MyEssentialVirtualSlots
DependantNetworks →	DependentNetworks  ← GetKBs
ISpecs		 →	ISubClass
PossibleSlotsOfISpecs →	PossibleSlotsOfISubClass
ActionType	 →	FunctionType

 Fix HLDefn.Defn (or ToInit..) - SortSlots => PutInOrder
 CreateSlot - descends from VirtualSlot, not AnySlot
 Fn for computing ToParseParts-like thing, so TPP can be eliminated
 Format & Datatype - should descend from RangeType, softly (not FunctionSpec)
 Names selected - need loops 
	λ(x) (McDo .. (NOT (Unitp (RPLACA (SETQ ...(EXPLODE (GETSYM))  
	[in CreateU4S,CreateSlot. ...]
 Ask user if he wishes to create a new slot - 
	[do we want to merge all things invalidated into one? 
	[  No! Later we might want to do other things, than just invalidate]
	If not, just pass HLDefnParser( highleveldefn ) along - use GetGetVal,
	and the like...
	 - so either PSUEDO-slot or REAL-slot
 If the "why" to the Invalidate function included "DoInverses", pass this along to
	AfterPutValue, so it will actually remove this and that!